<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>运算符</title>
    </head>
    <body>
        <script>
            // 题1.
            //3 + 2 +“7”的结果是什么？3 + (2 + "7")的结果又是什么？这两个表达式输出的值是什么类型？
            // 答:  57 String  327 String

            // 题2.
            //6 - false的结果是什么？
            // 答:  6

            // 题3.
            //6 - "false"和6 + "false"的结果分别是什么？结果输出值是什么数据类型？
            // 答: NaN Number     6false String

            // 题4.
            //下面代码分别输出什么？请写出分析过程
            // var a = 1;
            // var b = ++a + ++a;
            // console.log(b);
            // 答:  输出 5
            // 两个自增都是前置, 计算使用自增后的数值,  在计算中第一个++a实际参加计算为2, 第二个++a为3.
            //---上面和下面是两段代码---
            // var a = 1;
            // var b = a++ + a++;
            // console.log(b);
            // 答:  输出 3
            // 两个自增都为后置, 计算使用自增前的数值, 在计算中第一个a++实际参加计算的为1, 第二个为第一个a++后的结果2

            // 题5.
            //JS中哪些值通过Boolean对象转换出来的值为false
            // 答:  null 0 "" undifined NaN

            // 题6.
            //分析下面代码的结果并解释原因。
            // var a = 1;
            // var b = 2;

            // console.log(a && b);
            // console.log(a || b);
            // 答: 第一个打印2, 第二个打印1, 变量a, b转换的布尔值均为真值, 所以在第一个与运算中, 第一个a为真后, 仍需判断第二个b, 所以返回的值为b, 第二个或运算中, 因为a为真后, 或短路运算, 无需对b进行判断, 直接返回a

            // 题7.
            //分析下面代码，分别输出什么？(以注释形式写在console.log后面)

            // var str = "12306";
            // var str1 = 1;
            // var num = 12306;
            // var boo = true;

            // console.log(str == num); true
            // console.log(str === num);  false
            // console.log(str1 == boo);  true
            // console.log(str1 === boo); false

            // 题8.
            //分析下面代码，写出分析过程，请问 j 和 y 分别是多少？(不要运行代码，自己分析后写出答案)
            var i = 100;
            i++;
            j = i++;
            y = ++j;
            console.log(y); // 102
            console.log(j); // 102
            // 答:  首先在第一个i++时, i为101, 在第二个赋值给j时自增为前置, 所以此时实际赋值给j的是101, 但在给y赋值时, ++j为前置自增, 结果y为j自增运算后的结果102, 此时j自增后的值为102
        </script>
    </body>
</html>
